# -*- coding: utf-8 -*-


'''
模板越复杂，系数绝对值越大，就会导致计算与复杂，程序运行时间也就会约久，
在拉普拉斯变换中，中心系数与其他的系数和为0，目前使用较多的是中心系数为正（8）的扩展系数
'''
from skimage import io,filters,data
from matplotlib import pyplot as plt
import numpy as np
#图像空间滤波函数
def correl2d(img,window):
    m=window.shape[0]    
    n=window.shape[1]
    #边界通过零灰度填充
    img1=np.zeros((img.shape[0]+m-1,img.shape[1]+n-1))
    img1[(m-1)//2:(img.shape[0]+(m-1)//2),(n-1)//2:(img.shape[1]+(n-1)//2)]=img
    img2=np.zeros(img.shape)
    for i in range(img2.shape[0]):
        for j in range(img2.shape[1]):
            temp=img1[i:i+m,j:j+n]
            img2[i,j]=np.sum(np.multiply(temp,window))
    return img2
#img为原始图像
img=data.camera()
plt.figure()
plt.imshow(img,cmap='gray')
plt.axis('off')
window1=np.array([[0,1,0],[1,-4,1],[0,1,0]])
window2=np.array([[1,1,1],[1,-8,1],[1,1,1]])
window3=np.array([[1,1,1,1,1],[1,1,1,1,1],[1,1,-24,1,1],[1,1,1,1,1],[1,1,1,1,1]])
#中心系数为-4的模板变换
plt.figure()
img_laplace1=correl2d(img,window1)
img_laplace1=255*(img_laplace1-img_laplace1.min())/(img_laplace1.max()-img_laplace1.min())#拉普拉斯变换结果
img_laplace_enhance1=img+img_laplace1
plt.imshow(img_laplace_enhance1,cmap='gray')
plt.axis('off')
#中心系数为-8的模板变换
plt.figure()
img_laplace2=correl2d(img,window2)
img_laplace2=255*(img_laplace2-img_laplace2.min())/(img_laplace2.max()-img_laplace2.min())#拉普拉斯变换结果
img_laplace_enhance2=img+img_laplace2
plt.imshow(img_laplace_enhance2,cmap='gray')
plt.axis('off')

#中心系数为-24的5x5模板
plt.figure()
img_laplace3=correl2d(img,window3)
img_laplace3=255*(img_laplace3-img_laplace3.min())/(img_laplace3.max()-img_laplace3.min())#拉普拉斯变换结果
img_laplace_enhance3=img+img_laplace3
plt.imshow(img_laplace_enhance3,cmap='gray')
plt.axis('off')

#变换窗口模板为256，中心系数为-511
windows=np.ones((img.shape[0],img.shape[1]),dtype='int32')
windows[256,256]=-511
plt.figure()
img_laplaces=correl2d(img,windows)
img_laplaces=255*(img_laplaces-img_laplaces.min())/(img_laplaces.max()-img_laplaces.min())#拉普拉斯变换结果
img_laplace_enhances=img+img_laplaces
plt.imshow(img_laplace_enhances,cmap='gray')
plt.axis('off')